home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / programm.ing / m2gem106.lzh / CRYSTAL1.06 / TST / TESTBEZI / TESTBEZI.M2 next >
Encoding:
Text File  |  1993-11-21  |  5.1 KB  |  223 lines

  1. MODULE TestBezier;
  2.  
  3. (* Demo-Quelltext für die Bearbeitung von Off-Screen-Bitmaps*)
  4.  
  5. FROM ApplMgr    IMPORT ApplInit,ApplExit;
  6. FROM GrafMgr    IMPORT GrafHandle,GrafMouse,MOn,MOff;
  7. FROM EvntMgr    IMPORT EvntKeybd;
  8. FROM VDI        IMPORT XY,MFDB,Black,Green;
  9. FROM VControl   IMPORT RC,VOpnVWk,VClsVWk,VOpnBm,VClsBm,VSClip,
  10.                        VBezOn,VBezOff,VBezQual;
  11. FROM VAttribute IMPORT VSFColor,VSFInterior,FISPattern,VSFStyle,
  12.                        VSFPerimeter,VSWrMode,MdReplace;
  13. FROM VOutput    IMPORT VGText,VBar,VBezFill;
  14. FROM VRaster    IMPORT VROCpyFm,SOnly;
  15. FROM PORTAB     IMPORT UNSIGNEDWORD,NULL,UNSIGNEDBYTE;
  16. FROM INTRINSIC  IMPORT VOID;
  17.  
  18. (* Globale Variablen *)
  19.  
  20. VAR SHandle  : UNSIGNEDWORD;
  21.     BHandle  : UNSIGNEDWORD;
  22.  
  23.     ScreenOut: ARRAY[0..127] OF UNSIGNEDWORD;
  24.     BitmapOut: ARRAY[0..127] OF UNSIGNEDWORD;
  25.  
  26.     Screen   : MFDB;
  27.     Bitmap   : MFDB;
  28.  
  29.     XYArr    : ARRAY[0..7] OF XY;
  30.  
  31. (* virtuelle Workstation öffnen *)
  32.  
  33. PROCEDURE OpenVWk(VAR WorkOut: ARRAY OF UNSIGNEDWORD): UNSIGNEDWORD;
  34.  
  35. VAR Count : [0..9];
  36.     Dummy : UNSIGNEDWORD;
  37.     Handle: UNSIGNEDWORD;
  38.     WorkIn: ARRAY[0..10] OF UNSIGNEDWORD;
  39.  
  40. BEGIN
  41.   Handle:= GrafHandle(Dummy,Dummy,Dummy,Dummy);
  42.  
  43.   FOR Count:= 0 TO 9 DO
  44.     WorkIn[Count]:= 1;
  45.   END;
  46.  
  47.   WorkIn[10]:= RC; (* Rasterkoordinaten *)
  48.  
  49.   VOpnVWk(WorkIn,Handle,WorkOut);
  50.  
  51.   RETURN Handle;
  52. END OpenVWk;
  53.  
  54. (* Off-Screen-Bitmap öffnen *)
  55.  
  56. PROCEDURE OpenBitmap(    X      : UNSIGNEDWORD;
  57.                          Y      : UNSIGNEDWORD;
  58.                      VAR Bitmap : MFDB;
  59.                      VAR WorkOut: ARRAY OF UNSIGNEDWORD): UNSIGNEDWORD;
  60.  
  61. VAR Count : [0..19];
  62.     Dummy : UNSIGNEDWORD;
  63.     Handle: UNSIGNEDWORD;
  64.     WorkIn: ARRAY[0..19] OF UNSIGNEDWORD;
  65.  
  66. BEGIN
  67.   Handle:= GrafHandle(Dummy,Dummy,Dummy,Dummy);
  68.  
  69.   FOR Count:= 0 TO 9 DO
  70.     WorkIn[Count]:= 1;
  71.   END;
  72.  
  73.   WorkIn[10]:= RC; (* Rasterkoordinaten *)
  74.  
  75.   WorkIn[11]:= X; (* Breite - 1 *)
  76.   WorkIn[12]:= Y; (* Höhe   - 1 *)
  77.  
  78.   WorkIn[13]:= 0; (* Pixelbreite und -Höhe des Bildschirms übernehmen *)
  79.   WorkIn[14]:= 0;
  80.  
  81.   FOR Count:= 15 TO 19 DO
  82.     WorkIn[Count]:= 0;    (* reserviert *)
  83.   END;
  84.  
  85.   VOpnBm(WorkIn,Bitmap,Handle,WorkOut);
  86.  
  87.   RETURN Handle;
  88. END OpenBitmap;
  89.  
  90. (* Clipping für den Bildschirm setzen *)
  91.  
  92. PROCEDURE ClipScreen;
  93.  
  94. VAR XYArr: ARRAY[0..3] OF XY;
  95.  
  96. BEGIN
  97.   XYArr[0]:= 0;
  98.   XYArr[1]:= 0;
  99.   XYArr[2]:= ScreenOut[0];
  100.   XYArr[3]:= ScreenOut[1];
  101.   VSClip(SHandle,TRUE,XYArr); (* Clipping für den Bildschirm *)
  102. END ClipScreen;
  103.  
  104. (* Clipping für die Bitmap setzen *)
  105.  
  106. PROCEDURE ClipBitmap;
  107.  
  108. VAR XYArr: ARRAY[0..3] OF XY;
  109.  
  110. BEGIN
  111.   XYArr[0]:= 0;
  112.   XYArr[1]:= 0;
  113.   XYArr[2]:= BitmapOut[0];
  114.   XYArr[3]:= BitmapOut[1];
  115.   VSClip(BHandle,TRUE,XYArr); (* Clipping für die Bitmap *)
  116. END ClipBitmap;
  117.  
  118. (* Auf der Off-Screen-Bitmap zeichnen *)
  119.  
  120. PROCEDURE Draw;
  121.  
  122. VAR BezArr  : ARRAY[0..511] OF UNSIGNEDBYTE;
  123.     XYArr   : ARRAY[0..511] OF UNSIGNEDWORD;
  124.     Extent  : ARRAY[0..3] OF XY;
  125.     Actual  : UNSIGNEDWORD;
  126.     TotPts  : UNSIGNEDWORD;
  127.     TotMoves: UNSIGNEDWORD;
  128.     Text    : ARRAY[0..5] OF CHAR;
  129.  
  130. BEGIN
  131.   VSFColor(BHandle,Green);
  132.   VSFInterior(BHandle,FISPattern);
  133.   VSFStyle(BHandle,1);
  134.   VSFPerimeter(BHandle,TRUE);
  135.   VSWrMode(BHandle,MdReplace);
  136.  
  137.   XYArr[0]:= 0;
  138.   XYArr[1]:= 0;
  139.   XYArr[2]:= 250;
  140.   XYArr[3]:= 250;
  141.   VBar(BHandle,XYArr);
  142.  
  143.   VSFColor(BHandle,Black);
  144.   VSFStyle(BHandle,3);
  145.   VOID(VBezOn(BHandle));
  146.   Actual:= VBezQual(BHandle,100);
  147.  
  148.   XYArr[0]:= 100;
  149.   XYArr[1]:= 100;
  150.   XYArr[2]:= 400;
  151.   XYArr[3]:= 100;
  152.   XYArr[4]:= 400;
  153.   XYArr[5]:= 400;
  154.   XYArr[6]:= 100;
  155.   XYArr[7]:= 400;
  156.  
  157.   XYArr[8]:= 200;
  158.   XYArr[9]:= 200;
  159.   XYArr[10]:= 300;
  160.   XYArr[11]:= 200;
  161.   XYArr[12]:= 300;
  162.   XYArr[13]:= 300;
  163.   XYArr[14]:= 200;
  164.   XYArr[15]:= 300;
  165.  
  166.   BezArr[0]:= 1;
  167.   BezArr[1]:= 0;
  168.   BezArr[2]:= 0;
  169.   BezArr[3]:= 0;
  170.   BezArr[4]:= 3;
  171.   BezArr[5]:= 0;
  172.   BezArr[6]:= 0;
  173.   BezArr[7]:= 0;
  174.  
  175.   VBezFill(BHandle,8,XYArr,BezArr,Extent,TotPts,TotMoves);
  176.   VBezOff(BHandle);
  177.  
  178.   Text:= "Text!";
  179.   VGText(BHandle,50,50,Text);
  180. END Draw;
  181.  
  182. BEGIN
  183.   IF ApplInit() >= 0 THEN
  184.     SHandle:= OpenVWk(ScreenOut);
  185.     IF SHandle # 0 THEN
  186.       Bitmap.FDAddr:= NULL; (* VDI alloziert Bitmap *)
  187.       Bitmap.FDNPlanes:= 0; (* Planeanzahl wie Bildschirm *)
  188.  
  189.       BHandle:= OpenBitmap(799,607,Bitmap,BitmapOut);
  190.       IF BHandle # 0 THEN
  191.         ClipScreen; (* Clipping für den Bildschirm setzen *)
  192.         ClipBitmap; (* Clipping für die Bitmap setzen     *)
  193.         Draw;       (* auf der Off-Screen-Bitmap zeichnen *)
  194.  
  195.         (* und jetzt die Bitmap auf den Bildschirm kopieren... *)
  196.  
  197.         Screen.FDAddr:= NULL;
  198.  
  199.         XYArr[0]:= 0;
  200.         XYArr[1]:= 0;
  201.         XYArr[2]:= 799;
  202.         XYArr[3]:= 607;
  203.         XYArr[4]:= 100;
  204.         XYArr[5]:= 100;
  205.         XYArr[6]:= 899;
  206.         XYArr[7]:= 707;
  207.  
  208.         GrafMouse(MOff,NIL);
  209.         VROCpyFm(SHandle,SOnly,XYArr,Bitmap,Screen);
  210.         GrafMouse(MOn,NIL);
  211.  
  212.         VOID(EvntKeybd());
  213.  
  214.         VClsBm(BHandle); (* Bitmap schließen *)
  215.       END;
  216.  
  217.       VClsVWk(SHandle); (* virtuelle Workstation schließen *)
  218.  
  219.       ApplExit;
  220.     END;
  221.   END;
  222. END TestBezier.
  223.